<?php
/**
 * Created by PhpStorm.
 * User: linvscode
 * Date: 2018/7/29
 * Time: 15:41
 */
define('BASEDIR', __DIR__);
include BASEDIR.'/IMooc/Loader.php';
spl_autoload_register('\\IMooc\\Loader::autoload');

/**
 *
 *
//测试自动载入 符合psr-0
IMooc\Objects::test();
App\Controller\Home\Index::test();
 *
 *
 */

/**
//双向链表提供栈的功能，先进后出

$stack = new SplStack();
$stack->push("data1\n");
$stack->push("data2\n");

echo $stack->pop();
echo $stack->pop();

 *
 */

/**
//先进先出的队列
$queue = new SplQueue();
$queue->enqueue("data1");
$queue->enqueue("data2");

echo $queue->dequeue();
echo $queue->dequeue();
 *
 */

/**
//提供堆的主要功能,使最小值保持在最顶端
$heap = new SplMinHeap();
$heap->insert('1234');
$heap->insert('123');
echo $heap->extract();//提取
echo $heap->extract();//提取
 *
 */

/**
//指定最大索引长度，最快实现数组
$array = new SplFixedArray(10);
$array[0] = 123;
$array[3] = 1234;
var_dump($array);
 *
 */

/**
 *
//   四种魔术方法
//__set 设置 __get  获取 不存在的属性
$obj = new IMooc\Objects();

$obj->title = 'hello';      // __set

echo $obj->title;   // __get

//echo $obj->title('hello', 123);     //使用魔术方法 call

//echo \IMooc\Objects::title('hello', 34);    //使用魔术方法 callStatic

//echo $obj;  // __toString 对象转化为字符串

//echo $obj("test");    // 对象当成函数使用 __invoke 将对象转化为函数
 */

/**
 * php中最基本的三种设计模式
 */

/**
// 工厂模式
$db = IMooc\Factory::createDatabase();      // 修改类名时可只修改工厂类中的类名即可

//单例模式
$db = IMooc\Database::getInstance();        // 单例模式只创建一个类

//注册器模式
$db = \IMooc\Register::get('db1');  //只要使用工厂模式一次（初始化处）后就可不再需要通过以上两种方法生成对象
 *
 */

/**
//适配器模式  接口约定好方法，在任意的数据库连接方式上切换

$db = new IMooc\Database\MySQL();
$db->connect('127.0.0.1', 'root', 'root', 'test');
$db->query('show databases');
$db->close();

 *
 */

/**

//策略模式 .从硬编码到解耦的一种模式
class Page
{
    protected $strategy;

    function setStrategy(\IMooc\UserStrategy $strategy) {
        $this->strategy = $strategy;
    }

    function index()
    {
        $this->strategy->showAd();
        $this->strategy->showCategory();
    }
}

$page = new Page;
if (isset($_GET['female'])) {
    $strategy = new \IMooc\FemaleUserStrategy();
} else{
    $strategy = new \IMooc\MaleUserStrategy();
}
$page->setStrategy($strategy);
$page->index();

 */